#include "login.h"
#include "ui_login.h"
#include<QFile>
#include<QTextStream>
#include<QMouseEvent>
#include<QDebug>
#include<QPainter>
#include<QSettings>
#include"src/mes.h"
#include<QApplication>
#include<QMovie>
#include<QTimer>
#include<QMessageBox>


Login::Login(bool firstLogin,QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::Login)
{
    ui->setupUi(this);
    setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint |Qt::WindowStaysOnTopHint);

    mMoveing=false;

    this->firstLogin=firstLogin;

    t=new QTimer(this);

    QSettings config("UserConfig.ini", QSettings::IniFormat);
    m_NameStr = config.value("USERCONFIG/UserName", "").toString();
    m_PasStr = config.value("USERCONFIG/PassWord", "").toString();
    m_isRember = config.value("USERCONFIG/IsRemberPas", "0").toInt()==1?true:false;
    m_isAutoLog = config.value("USERCONFIG/IsAutoLog", "0").toInt()==1?true:false;

    if (!m_NameStr.isEmpty() && !m_PasStr.isEmpty()){
        ui->lineEdit->setText(m_NameStr);
        ui->lineEdit_2->setText(m_PasStr);

        if (m_isRember == 1) {
            ui->checkBox->setCheckState(Qt::Checked);
        }
        else {
            ui->checkBox->setCheckState(Qt::Unchecked);
        }

        if (m_isAutoLog == 1) {
            ui->checkBox_2->setCheckState(Qt::Checked);
            if(firstLogin){
                t->setInterval(50);
                t->start();
            }
        }else{
            ui->checkBox_2->setCheckState(Qt::Unchecked);
        }
    }

    ui->pushButton->setFocus();    //设置默认焦点
    ui->pushButton->setShortcut( QKeySequence::InsertParagraphSeparator );  //设置快捷键为键盘的“回车”键
    ui->pushButton->setShortcut(Qt::Key_Enter);  //设置快捷键为enter键
    ui->pushButton->setShortcut(Qt::Key_Return); //设置快捷键为小键盘上的enter键

    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(LogMainSlots()));        // 登录
    connect(t,SIGNAL(timeout()),this,SLOT(autoLogin()));
}

void Login::autoLogin()
{
    if(firstLogin){
       t->stop();
       emit ui->pushButton->clicked();
    }
}

int Login::passwordIsTrue(QString workNumber,QString password)
{
    if(!Mes::getInstance()->openDatabase()){
//        ui->label_4->setText("网络连接失败");
        QMessageBox::critical(this, QString("错误"), QString("网络连接超时\n\n请检查网络后重试。"));
        return 0;
    }else{
        if(Mes::getInstance()->getRoleHash(workNumber)){
            QString msg;
            if(Mes::getInstance()->loginApi(msg,workNumber,password)){
                saveSetting();
                accept();
                return 1;
            }else{
                ui->label_4->setText(msg);
                return 0;
            }
        }else{
            ui->label_4->setText("用户名不存在");
            return 0;
        }
    }
}

void Login::LogMainSlots()
{
    m_NameStr = ui->lineEdit->text().trimmed();
    m_PasStr = ui->lineEdit_2->text().trimmed();
    m_isRember=(ui->checkBox->checkState()==Qt::Checked);
    m_isAutoLog=(ui->checkBox_2->checkState()==Qt::Checked);

    if (m_NameStr.isEmpty() || m_PasStr.isEmpty()){
        ui->label_4->setText("用户名或密码不能为空");
        return;
    }

//    if (m_NameStr!=m_PasStr){
//        ui->label_4->setText("用户名或密码错误");
//        return;
//    }

//    if (m_NameStr=="admin"){
//        saveSetting();
//        QDialog::accept();
//        return;
//    }

    passwordIsTrue(m_NameStr,m_PasStr);
}

void Login::saveSetting()
{
    QSettings config("UserConfig.ini", QSettings::IniFormat);
    if(m_isRember){
        config.setValue("USERCONFIG/UserName",m_NameStr);
        config.setValue("USERCONFIG/PassWord",m_PasStr);
        config.setValue("USERCONFIG/IsRemberPas",1);
        config.setValue("USERCONFIG/IsAutoLog",m_isAutoLog?1:0);
        qDebug()<<m_isAutoLog;
    }else{
        config.setValue("USERCONFIG/UserName","");
        config.setValue("USERCONFIG/PassWord","");
        config.setValue("USERCONFIG/IsRemberPas",0);
        config.setValue("USERCONFIG/IsAutoLog",0);
    }
}

//重写鼠标按下事件
void Login::mousePressEvent(QMouseEvent *event)
{
    mMoveing = true;
    //记录下鼠标相对于窗口的位置
    //event->globalPos()鼠标按下时，鼠标相对于整个屏幕位置
    //pos() this->pos()鼠标按下时，窗口相对于整个屏幕位置
    mMovePosition = event->globalPos() - pos();
    return QWidget::mousePressEvent(event);
}

//重写鼠标移动事件
void Login::mouseMoveEvent(QMouseEvent *event)
{
    //(event->buttons() && Qt::LeftButton)按下是左键
    //鼠标移动事件需要移动窗口，窗口移动到哪里呢？就是要获取鼠标移动中，窗口在整个屏幕的坐标，然后move到这个坐标，怎么获取坐标？
    //通过事件event->globalPos()知道鼠标坐标，鼠标坐标减去鼠标相对于窗口位置，就是窗口在整个屏幕的坐标
    if (mMoveing && (event->buttons() && Qt::LeftButton)
        && (event->globalPos()-mMovePosition).manhattanLength() > QApplication::startDragDistance())
    {
        move(event->globalPos()-mMovePosition);
        mMovePosition = event->globalPos() - pos();
    }
    return QWidget::mouseMoveEvent(event);
}

void Login::mouseReleaseEvent(QMouseEvent *event)
{
    mMoveing = false;
}

Login::~Login()
{
    delete ui;
}

void Login::on_pushButton_2_clicked()
{
    QDialog::reject();
}

//void Login::closeEvent(QCloseEvent *event)
//{
//    reject();
//}

//bool Login::testLog()
//{
//    if (m_isAutoLog == false || m_isRember == false)
//    {
//        return false;
//    }

//    if (m_NameStr.isEmpty() || m_PasStr.isEmpty())
//    {
//        m_NameStr = ui.lineEdit_Name->text();
//        m_PasStr = ui.lineEdit_PasWorld->text();
//        if (m_NameStr.isEmpty() || m_PasStr.isEmpty())
//        {
//            QMessageBox::warning(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("用户名或密码输入错误，请重新输入！"));
//            return false;
//        }
//    }

//    if ((m_NameStr == "admin") && (m_PasStr == "123456")) {
//        this->close();
//        accept();
//    }
//    else {
//        QMessageBox::warning(this, QString::fromLocal8Bit("错误"), QString::fromLocal8Bit("用户名或密码输入错误，请重新输入！"));
//        return false;
//    }
//    return true;
//}

//int Login::passwordIsTrue()
//{
//    loading.start();
//    QMovie *movie = new QMovie(":/2.gif");     // 1不透明，2透明 3 透明   用2；
//    ui->label_4->setMovie(movie);
//    movie->start();

//    if(!Mes::getInstance()->openDatabase()){
//        ui->label_4->setText("网络连接失败");
//        return 1;
//    }
//    QList<QMap<QString,QVariant>> roleData;
//    roleData=Mes::getInstance()->getRole(m_NameStr);             // 由工号得到人名，权限，权限名称
//    if(roleData.isEmpty()){
//        ui->label_4->setText("用户名不存在");
//        return 2;
//    }else{                 // 向数据库查询获取需要值
//        return 3;
//    }
//}

//void Login::AutoLogSlots(int state)
//{
//    if (state == Qt::Checked)
//    {
//        m_isAutoLog = true;
//    }else{
//        m_isAutoLog = false;
//    }
//}

//void Login::ChangeRemberStateSlots(int state)
//{
//    if (state == Qt::Checked)
//    {
//        m_isRember = true;
//    }else{
//        m_isRember = false;
//    }
//}


//void Login::paintEvent(QPaintEvent* event)
//{
//    // 绘图处理
//    // 重绘窗口的背景颜色
//    QPalette palette = this->palette();
//    qDebug() << "palette color: " << palette.color(QPalette::Window);
//    QColor color(255,255,255);
//    palette.setBrush(QPalette::Window, QBrush(color));
//    this->setPalette(palette);
//    // 重绘窗口的边框大小
//    QPainter painter(this);
//    QRect rect = this->rect();
//    QPen pen;
//    pen.setWidth(1);
//    pen.setColor(Qt::black);
//    painter.setPen(pen);
//    painter.drawRect(rect);

//    QWidget::paintEvent(event);
//}

//Login::Login(QWidget *parent)
//{

//    //Qt::FramelessWindowHint 无边框
//    //Qt::WindowStaysOnTopHint 窗口在最顶端，不会拖到任务栏下面
//    setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint |Qt::WindowStaysOnTopHint);
//    this->setStyleSheet("QDialog{border:2px solid green;}");
//}

//void Login::initStyle()                   // 已加载全局样式表
//{
//    //加载样式表
//    QString qss;
//    //QFile file(":/qss/psblack.css");
//    //QFile file(":/qss/flatwhite.css");
////    QFile file(":/lightblue.css");
//    QFile file(":/flatwhite.css");
//    if (file.open(QFile::ReadOnly)) {
//#if 1
//        //用QTextStream读取样式文件不用区分文件编码 带bom也行
//        QStringList list;
//        QTextStream in(&file);
//        //in.setCodec("utf-8");
//        while (!in.atEnd()) {
//            QString line;
//            in >> line;
//            list << line;
//        }

//        qss = list.join("\n");
//#else
//        //用readAll读取默认支持的是ANSI格式,如果不小心用creator打开编辑过了很可能打不开
//        qss = QLatin1String(file.readAll());
//#endif
////        qDebug()<<qss;
//        QString paletteColor = qss.mid(20, 7);
//        qApp->setPalette(QPalette(QColor(paletteColor)));
//        qApp->setStyleSheet(qss);
//        file.close();
//    }
//}
